package JSP;

public class JSPIntroduct {
    /**
     *
     * 1.什么是jsp？它有什么作用？
     * jsp的全称是 java server pages java的服务器页面
     * jsp的主要功能是代替Servlet程序回传html页面数据
     * 因为servlet开发和维护成本高
     *
     * 2.jsp如何访问：
     *   jsp页面和html页面一样,都是存放在web目录下，访问也跟访问html页面一样。
     * 比如：
     *      在web目录下有如下文件：
     *      a.html    访问地址是：   http::/ip:port/工程路径/a.html
     *      b.jsp     访问地址是：   http::/ip:port/工程路径/b.jsp
     *
     * 3.jsp本质上是一个servlet程序
     *  当我们第一次访问jsp页面的时候，tomcat服务器会帮我们把jsp页面翻译成为一个
     *  java源文件，并且对它进行编译成为.class字节码文件,我们打开java原件时不难
     *  发现里面的内容是：
     *
     *  4.jsp头部的page指令
     *    jsp的page指令可以修改jsp页面中一些重要的配置属性，或者行为。
     *    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
     *    language 属性      表示jsp翻译后是什么语言文件 暂时只支持java
     *    contentType 属性   表示jsp返回的数据类型是什么，也是源码中respond.setContentType()的值
     *    pageEncoding 属性  表示当前jsp页面文件本身的字符集
     *    import 属性        用于导包导类
     *    ================================以下两个属性给out输出流使用=============================
     *    autoFlush 属性    设置当out输出流缓冲区满了之后，是否自动刷新缓冲区，默认值是true
     *    errorPage 属性    设置out缓冲区的打小。默认是8kb
     *    ================================以上两个属性给out输出流使用=============================
     *    ErrorPage 属性      设置当jsp页面运行出错时，自动跳转去的错误页面路径 ErrorPage="/文件名"; /表示 http://ip:port/工程路径/
     *    isErrorPage 属性  设置当前jsp页面是否是错误信息页面。默认是false。如果是true可以获取异常信息
     *    session 属性     设置范围当前jsp页面，是否创建HttpSession对象。默认是true
     *    extends 属性     设置jsp翻译出来的java的类默认继承谁
     *
     *   以上均为头部命令  键值对形式
     *
     *
     *   5.jsp中常用的脚本
     *   声明脚本：
     *     格式是 <%! 声明java代码 %>
     *     作用：可以给jsp翻译出来的java类定义属性和方法
     *     甚至是静态代码块，内部内等
     *
     *   表达式脚本：(常用)
     *    格式:<%=表达式%?>
     *    作用：在jsp页面上输出数据
     *    特点：
     *     1.所有的表达式脚本都会被翻译到_jspSevice()方法中
     *     2.表达式脚本都会被翻译成为out.print()输出到页面上
     *     3.由于表达式脚本翻译的内容都在_jspSevice()方法中，
     *     所以_jspSevice()中的对象读可以直接使用
     *     4.表达式脚本中的表达式不能以分号结束
     *
     *     代码脚本：
     *     格式： <% java语句 %>
     *     作用：可以在jsp页面中，编写我们自己需要的功能(写的是java语句)
     *     if语句  for循环语句  翻译后java文件中_jspSevice()方法内的代码都可以写
     *     特点：
     *     1.代码脚本翻译之后都在_jspSevice()方法中
     *     2.由于表达式脚本翻译的内容都在_jspSevice()方法中，
     *       所以_jspSevice()中的对象读可以直接使用
     *     3.还可以由多个代码脚本块这和完成一个完整的java语句
     *     4.代码脚本还可以和表达式脚本一起组合使用，在jsp页面输出数据
     *
     *     JSP注释可以注释掉一切jsp文件中的东西 <%-- --%>
     *
     *     jsp中的九大内置对象
     *     jsp中的内置对象，是指Tomcat在翻译Jsp页面成为Servlet源代码后
     *     内部提供的九大对象，叫内置对象
     *     1.request 请求对象
     *     2.response 响应对象
     *     3.pageContext jsp的上下文对象
     *     4.session   会话对象
     *     5.application  ServletContext对象
     *     6.config    ServletConfig对象
     *     7.out    jsp输出流对象
     *     8.page  指向当前jsp的对象
     *     9.excption 异常对象
     *
     *     jsp的四大域对象
     *     四大域对象分别是：
     *     pageContext (PageContextimpl类)    当前jsp页面范围有效
     *     request     (HttpServletRequest类) 一次请求内有效
     *     session     (HyypSession类)        一个会话范围内有效(会话：打开浏览器访问服务器开始,直到关闭浏览器会话结束)
     *     application (ServletContext类)     整个web工程范围内有效(只要web工程不停止,数据都在)
     *     域对象是可以像Map一样存储数据的对象。
     *     四个域对象功能一样。不同的是他们对数据的存取范围
     *
     *     在使用上它们是有有限顺序的。
     *     优先顺序分别是:他们从小到大的范围顺序
     *     原因：节省内存
     *
     *     out和respond输出的区别：
     *     一般在jsp页面，用out进行输出，避免打乱顺序
     *         out.write() 输出字符串没有问题
     *         out.print() 输出任意数据都没有问题(都转换为字符串后调用write输出)
     *
     *     静态包含
     *    <%@ include file="/"%>
     *    特点：
     *       1.静态包含不回翻译被包含的jsp页面
     *       2.静态包含其实是把被包含是jsp页面的代码拷贝到包含的位置执行输出
     *    好处：如果你的网页 头部和尾部完全一样 中间部分不一样 那么可以采用这种方法
     *          方便修改一改全改
     *
     *
     *     动态包含：
     *     <jsp:include page=""></jsp:include>
     *     特点：
     *      1.会把包含的jsp页面也翻译成java代码
     *      2.动态包含底层代码使用如下代码去调用被包含的jsp页面执行输出
     *        JspRuntimeLibrary.include(request,respond,"/文件具体路径,out,false);
     *      3.动态包含，还可以传递参数
     *
     *
     *       jsp请求转发标签
     *       <jsp:forward page= "要转发的文件名字" ></jsp:forward>
     *
     *
     *
     *  */
}
